package com.tbit.uqbike.service.business;

import com.tbit.uqbike.object.pojo.*;
import com.tbit.uqbike.object.pojo.dto.ActivityDTO;
import com.tbit.uqbike.object.pojo.vo.ActivityVO;
import com.tbit.common.entity.view.PageResult;
import com.tbit.common.entity.view.Result;

import java.util.Date;
import java.util.List;

/**
 * 活动管理接口
 *
 * @Author:BUGTian
 * @DATE: 2022/5/17
 */
public interface ActivityService {

    /**
     * 添加邀请新用户活动
     *
     * @param activityDTO
     */
    Result addActivity(ActivityDTO activityDTO);

    /**
     * 修改邀请新用户活动
     *
     * @param activityDTO
     * @return
     */
    Result update(ActivityDTO activityDTO);

    /**
     * 根据主键查询活动详情
     *
     * @param id
     * @return
     */
    Result<ActivityVO> queryById(Integer id);


    /**
     * 分页查询活动列表
     *
     * @param page
     * @param size
     * @param accountId
     * @param isvalid
     * @return
     */
    PageResult<Activity> queryPage(Integer page, Integer size, Integer accountId, Integer isvalid);

    /**
     * 活动开关
     *
     * @param id
     * @return
     */
    Result activitySwitch(Integer id);

    /**
     * 活动统计次数
     *
     * @param accountId
     * @param adAccountId
     * @param startTime
     * @param endTime
     * @param eventType
     * @return
     */
    Result<List<ActiveStat>> activeStatCount(Integer accountId, Integer adAccountId, String startTime, String endTime, Integer eventType);

    /**
     * 活动统计次数分页
     *
     * @param accountId
     * @param adAccountId
     * @param startTime
     * @param endTime
     * @param eventType
     * @param page
     * @param size
     * @return
     */
    Result<PageResult<ActiveStat>> activeStatCountPage(Integer accountId, Integer adAccountId, String startTime, String endTime, Integer eventType, Integer page, Integer size);

    /**
     * 活动统计人数
     *
     * @param accountId
     * @param adAccountId
     * @param eventType
     * @return
     */
    List<EvenJoinDetail> activeCountNumber(Integer accountId, Integer adAccountId, Integer eventType);

    /**
     * 奖励统计明细
     *
     * @param page        当前页码
     * @param size        每页显示的行
     * @param adAccountId 区域id
     * @param accountId   品牌id
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param invitePhone 用户手机号
     * @param eventId     活动id
     * @param eventType   活动类型
     * @param rewardName  优惠券名称
     * @return
     */
    PageResult<UserRewardLog> queryUserRewardLog(Integer page, Integer size, Integer adAccountId, Integer accountId, Date startTime, Date endTime, String invitePhone, Integer eventId, Integer eventType, String rewardName);

    /**
     * 用户排行榜
     *
     * @param page      当前页码
     * @param size      每页显示的行
     * @param accountId 品牌id
     * @param eventId   活动id
     * @return
     */
    PageResult<UserRewardRank> queryUserRewardRank(Integer page, Integer size, Integer accountId, Integer eventId);

    /**
     * 删除活动
     *
     * @param id 活动主键id
     * @return
     */
    Result deleteActivity(Integer id);
}
